package sessionBeans;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import entities.Cliente;
import exceptions.EntityAlreadyExistException;

/**
 * Session Bean implementation class AdministradorClientesBean
 */
@Stateless
public class AdministradorClientesBean implements AdministradorClientes {

	@PersistenceContext(unitName="CRM")
    private EntityManager em;
    
    public AdministradorClientesBean() {
        // TODO Auto-generated constructor stub
    }

	@Override
	public Cliente buscarCliente(int codigo) {
		Query q = em.createQuery("from Cliente a where a.codigo = :codigo");
		q.setParameter("codigo", codigo);
		Cliente cli = null;
		List<Cliente> clientes = (ArrayList<Cliente>) q.getResultList();
		if(!clientes.isEmpty()){
			cli = clientes.get(0);
		}
		return cli;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Cliente buscarCliente(String domicilio) {
		Query q = em.createQuery("from Cliente a where lower(a.domicilio) like :dom");
		q.setParameter("dom", domicilio.toLowerCase());
		Cliente cli = null;
		List<Cliente> clientes = (ArrayList<Cliente>) q.getResultList();
		if(!clientes.isEmpty()){
			cli = clientes.get(0);
		}
		return cli;
	}

	@Override
	public Cliente buscarClienteNombre(String nombre) {
		Query q = em.createQuery("from Cliente a where lower(a.nombre) like :nom");
		q.setParameter("nom", nombre.toLowerCase());
		Cliente cli = null;
		List<Cliente> clientes = (ArrayList<Cliente>) q.getResultList();
		if(!clientes.isEmpty()){
			cli = clientes.get(0);
		}
		return cli;
	}

	@Override
	public List<Cliente> getAllClientes() {
		Query q = em.createQuery("from Cliente");
		List<Cliente> clientes = (ArrayList<Cliente>) q.getResultList();
		return clientes;
	}

	@Override
	public boolean grabarCliente(Cliente cliente)
			throws EntityAlreadyExistException {
		Cliente existe = this.buscarCliente(cliente.getCodigo());
		if(existe!=null){
			throw new EntityAlreadyExistException("Cliente: "+cliente.getCodigo());
		}
		try{
			em.persist(cliente);
			return true;
		} catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}

	@Override
	public boolean modificarCliente(Cliente nuevo, String codigoViejo) {
		Cliente v = this.buscarCliente(codigoViejo);
		if(v!=null){
			v.setCelular(nuevo.getCelular());
			v.setCodigo(nuevo.getCodigo());
			v.setCodigoPostal(nuevo.getCodigoPostal());
			v.setDomicilio(nuevo.getDomicilio());
			v.setLocalidad(nuevo.getLocalidad());
			v.setNombre(nuevo.getNombre());
			v.setTelefono(nuevo.getTelefono());
		}
		try{
			em.merge(v);
			return true;
		} catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}

}
